{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<center><h1>Python 中的卡尔曼和贝叶斯滤波器</h1></center>\n",
    "<p>\n",
    "<p>\n",
    "\n",
    "## 目录\n",
    "\n",
    "[**前言**](./00-Preface.ipynb)\n",
    "\n",
    "编写本书的动机。如何下载和阅读本书。IPython Notebook 和 Python 的要求。github 链接。\n",
    "\n",
    "[**第 1 章：g-h 滤波器**](./01-g-h-filter.ipynb)\n",
    "\n",
    "直观介绍 g-h 滤波器，也称为 $\\alpha$-$\\beta$ 滤波器，它是包括卡尔曼滤波器在内的滤波器系列。一旦您理解了本章，您就会理解卡尔曼滤波器背后的概念。\n",
    "\n",
    "[**第 2 章：离散贝叶斯滤波器**](./02-Discrete-Bayes.ipynb)\n",
    "\n",
    "介绍离散贝叶斯滤波器。通过此内容，您将以易于理解的形式学习支撑卡尔曼滤波器的概率（贝叶斯）推理。\n",
    "\n",
    "[**第 3 章：概率、高斯和贝叶斯定理**](./03-Gaussians.ipynb)\n",
    "\n",
    "介绍如何使用高斯来表示贝叶斯意义上的信念。高斯使我们能够实现离散贝叶斯滤波器中使用的算法，以在连续域中工作。\n",
    "\n",
    "[**第 4 章：一维卡尔曼滤波器**](./04-One-Dimensional-Kalman-Filters.ipynb)\n",
    "\n",
    "通过修改离散贝叶斯滤波器以使用高斯来实现卡尔曼滤波器。这是一个功能齐全的卡尔曼滤波器，尽管仅适用于一维问题。\n",
    "\n",
    "[**第 5 章：多元高斯**](./05-Multivariate-Gaussians.ipynb)\n",
    "\n",
    "将高斯扩展到多个维度，并演示“三角测量”和隐藏变量如何极大地改善估计。\n",
    "\n",
    "[**第 6 章：多元卡尔曼滤波器**](./06-Multivariate-Kalman-Filters.ipynb)\n",
    "\n",
    "我们将在单变量章节中开发的卡尔曼滤波器扩展为完整的、广义的线性问题滤波器。阅读本文后，您将了解卡尔曼滤波器的工作原理以及如何为您选择的（线性）问题设计和实现一个卡尔曼滤波器。\n",
    "\n",
    "[**第 7 章：卡尔曼滤波器数学**](./07-Kalman-Filter-Math.ipynb)\n",
    "\n",
    "在没有形成坚实的数学基础的情况下，我们已经尽可能地了解了。本章是可选的，尤其是第一次阅读时，但如果您打算编写稳健、数值稳定的滤波器，或者阅读文献，则需要了解本章中的材料。有些章节是理解后面关于非线性滤波的章节所必需的。\n",
    "\n",
    "[**第 8 章：设计卡尔曼滤波器**](./08-Designing-Kalman-Filters.ipynb)\n",
    "\n",
    "基于第 5 章和第 6 章中的材料，引导您完成几个卡尔曼滤波器的设计。只有通过查看几个不同的示例，您才能真正掌握所有理论。选择的示例是现实的，而不是“玩具”问题，以便您开始实现自己的滤波器。讨论但不解决数值稳定性等问题。\n",
    "\n",
    "[**第 9 章：非线性滤波**](./09-Nonlinear-Filtering.ipynb)\n",
    "\n",
    "所涵盖的卡尔曼滤波器仅适用于线性问题。然而世界是非线性的。在这里，我介绍了非线性系统给滤波器带来的问题，并简要讨论了我们将在后续章节中学习的各种算法。\n",
    "\n",
    "[**第 10 章：无迹卡尔曼滤波器**](./10-Unscented-Kalman-Filter.ipynb)\n",
    "\n",
    "无迹卡尔曼滤波器 (UKF) 是卡尔曼滤波器理论的最新发展。它们允许您过滤非线性问题，而无需像扩展卡尔曼滤波器那样需要闭式解。\n",
    "\n",
    "这个主题通常没有在现有文本中提及或被一笔带过了，而扩展卡尔曼滤波器则得到了大量的讨论。我把它放在第一位，因为 UKF 更容易理解和实现，并且过滤性能通常与扩展卡尔曼滤波器一样好甚至更好。我总是尝试首先为现实世界的问题实现 UKF，你也应该这样做。\n",
    "\n",
    "[**第 11 章：扩展卡尔曼滤波器**](./11-Extended-Kalman-Filters.ipynb)\n",
    "\n",
    "扩展卡尔曼滤波器 (EKF) 是线性化非线性问题的最常用方法。现实世界中的大多数卡尔曼滤波器都是 EKF，因此需要理解此材料才能理解现有代码、论文、演讲等。\n",
    "\n",
    "[**第 12 章：粒子滤波器**](./12-Particle-Filters.ipynb)\n",
    "\n",
    "粒子滤波器使用蒙特卡罗技术过滤数据。它们可以轻松处理高度非线性和非高斯系统以及多模态分布（同时跟踪多个对象），但计算要求较高。\n",
    "\n",
    "[**第 13 章：平滑**](./13-Smoothing.ipynb)\n",
    "\n",
    "卡尔曼滤波器是递归的，因此非常适合实时过滤。但是，它们在后处理数据方面非常有效。毕竟，卡尔曼滤波器是预测器-校正器，预测过去比预测未来更容易！我们讨论了一些常见的方法。\n",
    "\n",
    "[**第 14 章：自适应滤波**](./14-Adaptive-Filtering.ipynb)\n",
    "\n",
    "卡尔曼滤波器假设一个单一的过程模型，但机动目标通常需要由几个不同的过程模型来描述。自适应滤波使用几种技术来允许卡尔曼滤波器\n",
    "过滤器以适应目标不断变化的行为。\n",
    "\n",
    "[**附录 A：安装、Python、NumPy 和 FilterPy**](./Appendix-A-Installation.ipynb)\n",
    "\n",
    "简要介绍 Python 及其在本书中的使用方式。配套库 FilterPy 的描述。\n",
    "\n",
    "[**附录 B：符号和符号**](./Appendix-B-Symbols-and-Notations.ipynb)\n",
    "\n",
    "大多数书籍选择对相同的概念使用不同的符号和变量名称。这对于初学者来说是理解的一大障碍。我收集了本书中使用的符号和符号，并建立了表格，显示该领域的主要书籍使用的符号和名称。\n",
    "\n",
    "*目前仍只是一些笔记。*\n",
    "\n",
    "[**附录 D：H-Infinity 滤波器**](./Appendix-D-HInfinity-Filters.ipynb)\n",
    "\n",
    "描述 $H_\\infty$ 滤波器。\n",
    "\n",
    "*我有实现该滤波器的代码，但还没有支持文本。*\n",
    "\n",
    "[**附录 E：集合卡尔曼滤波器**](./Appendix-E-Ensemble-Kalman-Filters.ipynb)\n",
    "\n",
    "讨论集合卡尔曼滤波器，它使用蒙特卡洛方法处理非线性系统中非常大的卡尔曼滤波器状态。\n",
    "\n",
    "[**附录 F：FilterPy 源代码**](./Appendix-F-Filterpy-Code.ipynb)\n",
    "\n",
    "本书中使用的 FilterPy 中的重要类的列表。\n",
    "\n",
    "## 支持笔记本\n",
    "\n",
    "这些笔记本不是本书的主要部分，但包含了一些读者可能感兴趣的信息。\n",
    "\n",
    "[**计算和绘制 PDF**](./Supporting_Notebooks/Computing_and_plotting_PDFs.ipynb)\n",
    "\n",
    "描述我在书中如何实现各种 PDF 的绘制。\n",
    "\n",
    "[**交互**](./Supporting_Notebooks/Interactions.ipynb)\n",
    "\n",
    "各种算法的交互式模拟。使用滑块实时更改输出。\n",
    "\n",
    "[**将多元方程转换为单变量方程**](./Supporting_Notebooks/Converting-Multivariate-Equations-to-Univariate.ipynb)\n",
    "\n",
    "通过将所有向量和矩阵的维度设置为 1，证明多元方程与单变量卡尔曼滤波方程相同。\n",
    "\n",
    "[**传感器融合的迭代最小二乘**](./Supporting_Notebooks/Iterative-Least-Squares-for-Sensor-Fusion.ipynb)\n",
    "\n",
    "深入研究使用迭代最小二乘技术解决从多个 GPS 伪距测量中查找位置的非线性问题。\n",
    "\n",
    "[**泰勒级数**](./Supporting_Notebooks/Taylor-Series.ipynb)\n",
    "\n",
    "泰勒级数的简要介绍。\n",
    "\n",
    "### Github 存储库\n",
    "http://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>\n",
       "@import url('http://fonts.googleapis.com/css?family=Source+Code+Pro');\n",
       "@import url('http://fonts.googleapis.com/css?family=Lora');\n",
       "\n",
       ".CodeMirror pre {\n",
       "    font-family: 'Source Code Pro', Consolas, monocco, monospace;\n",
       "}\n",
       "    div.cell{\n",
       "        //width: 950px;\n",
       "        margin-left: 0% !important;\n",
       "        margin-right: auto;\n",
       "    }\n",
       "    div.text_cell_render{\n",
       "        font-family: 'Lora';\n",
       "        line-height: 125%;\n",
       "        font-size: 100%;\n",
       "        text-align: justify;\n",
       "        text-justify:inter-word;\n",
       "    }\n",
       "    div.text_cell code {\n",
       "        background: transparent;\n",
       "        color: #000000;\n",
       "        font-weight: 400;\n",
       "        font-size: 11pt;\n",
       "        font-family:  'Source Code Pro', Consolas, monocco, monospace;\n",
       "   }\n",
       "    h1 {\n",
       "        font-family: 'Open sans',verdana,arial,sans-serif;\n",
       "\t}\n",
       "\n",
       "    div.input_area {\n",
       "        background: #F6F6F9;\n",
       "        border: 1px solid #586e75;\n",
       "    }\n",
       "\n",
       "    .text_cell_render h1 {\n",
       "        font-weight: 200;\n",
       "        font-size: 30pt;\n",
       "        line-height: 100%;\n",
       "        color:#c76c0c;\n",
       "        margin-bottom: 0.5em;\n",
       "        margin-top: 1em;\n",
       "        display: block;\n",
       "        white-space: wrap;\n",
       "        text-align: left;\n",
       "    }\n",
       "    h2 {\n",
       "        font-family: 'Open sans',verdana,arial,sans-serif;\n",
       "        text-align: left;\n",
       "    }\n",
       "    .text_cell_render h2 {\n",
       "        font-weight: 200;\n",
       "        font-size: 16pt;\n",
       "        font-style: italic;\n",
       "        line-height: 100%;\n",
       "        color:#c76c0c;\n",
       "        margin-bottom: 0.5em;\n",
       "        margin-top: 1.5em;\n",
       "        display: block;\n",
       "        white-space: wrap;\n",
       "        text-align: left;\n",
       "    }\n",
       "    h3 {\n",
       "        font-family: 'Open sans',verdana,arial,sans-serif;\n",
       "    }\n",
       "    .text_cell_render h3 {\n",
       "        font-weight: 200;\n",
       "        font-size: 14pt;\n",
       "        line-height: 100%;\n",
       "        color:#d77c0c;\n",
       "        margin-bottom: 0.5em;\n",
       "        margin-top: 2em;\n",
       "        display: block;\n",
       "        white-space: wrap;\n",
       "        text-align: left;\n",
       "    }\n",
       "    h4 {\n",
       "        font-family: 'Open sans',verdana,arial,sans-serif;\n",
       "    }\n",
       "    .text_cell_render h4 {\n",
       "        font-weight: 100;\n",
       "        font-size: 14pt;\n",
       "        color:#d77c0c;\n",
       "        margin-bottom: 0.5em;\n",
       "        margin-top: 0.5em;\n",
       "        display: block;\n",
       "        white-space: nowrap;\n",
       "    }\n",
       "    h5 {\n",
       "        font-family: 'Open sans',verdana,arial,sans-serif;\n",
       "    }\n",
       "\n",
       "    .text_cell_render h5 {\n",
       "        font-weight: 200;\n",
       "        font-style: normal;\n",
       "        color: #1d3b84;\n",
       "        font-size: 16pt;\n",
       "        margin-bottom: 0em;\n",
       "        margin-top: 0.5em;\n",
       "        display: block;\n",
       "        white-space: nowrap;\n",
       "    }\n",
       "    div.output_subarea.output_text.output_pyout {\n",
       "        overflow-x: auto;\n",
       "        overflow-y: visible;\n",
       "        max-height: 5000000px;\n",
       "    }\n",
       "    div.output_subarea.output_stream.output_stdout.output_text {\n",
       "        overflow-x: auto;\n",
       "        overflow-y: visible;\n",
       "        max-height: 5000000px;\n",
       "    }\n",
       "    div.output_wrapper{\n",
       "        margin-top:0.2em;\n",
       "        margin-bottom:0.2em;\n",
       "}\n",
       "\n",
       "    code{\n",
       "        font-size: 6pt;\n",
       "\n",
       "    }\n",
       "    .rendered_html code{\n",
       "    background-color: transparent;\n",
       "    }\n",
       "    ul{\n",
       "        margin: 2em;\n",
       "    }\n",
       "    ul li{\n",
       "        padding-left: 0.5em;\n",
       "        margin-bottom: 0.5em;\n",
       "        margin-top: 0.5em;\n",
       "    }\n",
       "    ul li li{\n",
       "        padding-left: 0.2em;\n",
       "        margin-bottom: 0.2em;\n",
       "        margin-top: 0.2em;\n",
       "    }\n",
       "    ol{\n",
       "        margin: 2em;\n",
       "    }\n",
       "    ol li{\n",
       "        padding-left: 0.5em;\n",
       "        margin-bottom: 0.5em;\n",
       "        margin-top: 0.5em;\n",
       "    }\n",
       "    ul li{\n",
       "        padding-left: 0.5em;\n",
       "        margin-bottom: 0.5em;\n",
       "        margin-top: 0.2em;\n",
       "    }\n",
       "    a:link{\n",
       "       color:#447adb;\n",
       "    }\n",
       "    a:visited{\n",
       "       color: #1d3b84;\n",
       "    }\n",
       "    a:hover{\n",
       "       color: #1d3b84;\n",
       "    }\n",
       "    a:focus{\n",
       "       color:#447adb;\n",
       "    }\n",
       "    a:active{\n",
       "       font-weight: bold;\n",
       "       color:#447adb;\n",
       "    }\n",
       "    .rendered_html :link {\n",
       "       text-decoration: underline;\n",
       "    }\n",
       "    .rendered_html :hover {\n",
       "       text-decoration: none;\n",
       "    }\n",
       "    .rendered_html :visited {\n",
       "      text-decoration: none;\n",
       "    }\n",
       "    .rendered_html :focus {\n",
       "      text-decoration: none;\n",
       "    }\n",
       "    .rendered_html :active {\n",
       "      text-decoration: none;\n",
       "    }\n",
       "    .warning{\n",
       "        color: rgb( 240, 20, 20 )\n",
       "    }\n",
       "    hr {\n",
       "      color: #f3f3f3;\n",
       "      background-color: #f3f3f3;\n",
       "      height: 1px;\n",
       "    }\n",
       "    blockquote{\n",
       "      display:block;\n",
       "      background: #fcfcfc;\n",
       "      border-left: 5px solid #c76c0c;\n",
       "      font-family: 'Open sans',verdana,arial,sans-serif;\n",
       "      width:680px;\n",
       "      padding: 10px 10px 10px 10px;\n",
       "      text-align:justify;\n",
       "      text-justify:inter-word;\n",
       "      }\n",
       "      blockquote p {\n",
       "        margin-bottom: 0;\n",
       "        line-height: 125%;\n",
       "        font-size: 100%;\n",
       "      }\n",
       "</style>\n",
       "<script>\n",
       "    MathJax.Hub.Config({\n",
       "                        TeX: {\n",
       "                           extensions: [\"AMSmath.js\"],\n",
       "                           equationNumbers: { autoNumber: \"AMS\", useLabelIds: true}\n",
       "                           },\n",
       "                tex2jax: {\n",
       "                    inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ],\n",
       "                    displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ]\n",
       "                },\n",
       "                displayAlign: 'center', // Change this to 'center' to center equations.\n",
       "                \"HTML-CSS\": {\n",
       "                    scale: 95,\n",
       "                        availableFonts: [],\n",
       "                        preferredFont:null,\n",
       "                        webFont: \"TeX\",\n",
       "                    styles: {'.MathJax_Display': {\"margin\": 4}}\n",
       "                },\n",
       "                 \"fast-preview\": {\n",
       "                    \"disabled\": false\n",
       "                }\n",
       "        });\n",
       "</script>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#format the book\n",
    "from book_format import load_style\n",
    "load_style()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
